// const map = new Map([
//   ["a", 1],
//   ["b", 2],
//   ["c", 3],
// ]);

// for (const [key, value] of map) {
//   console.log(`${key}: ${value}`);
// }

// const set = new Set([1, 2, 3]);

// for (const value of set) {
//   console.log(value);
// }

const obj = {
  name: "张三",
  age: 18,
  gender: "男",
  [Symbol.iterator]() {
    // 根据可迭代协议书写具体的迭代方式
    const keys = Object.keys(this);
    let index = 0;

    return {
      next: () => {
        if (index < keys.length) {
          // 说明还存在下一个元素
          return {
            value: this[keys[index++]],
            done: false,
          };
        } else {
          // 说明迭代完了，没有更多的元素了
          return {
            value: undefined,
            done: true,
          };
        }
      },
    };
  },
};

// for (const idx in obj) {
//   console.log(idx);
// }

for (const item of obj) {
  console.log(item);
}
